package com.wanshu.sys.mapper;

import com.wanshu.sys.entity.SysRole;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 角色 Mapper 接口
 * </p>
 *
 * @author 波哥
 * @since 2023-05-09
 */
public interface SysRoleMapper extends BaseMapper<SysRole> {


    /**
     * 是否可以删除角色
     * 利用笛卡尔积，查询包含指定角色ID的相关数据条数，判断是否可以删除该角色
     *
     * 关于注解：@Param("roleId")
     * 1、多个基本类型的参数或者String类型，需要加上。
     * 2、不使用@Param注解时，参数只能有一个，并且是Javabean。
     * 3、如果只有一个基本类型（或包装类）的话，可以忽略，但是最好加上
     *
     * @param roleId 角色id
     * @return {@link Long }
     * @author 张颖辉（zyh）
     * @date 2023/06/06
     * @version 1.0.0
     */
    int canDeleteRole(Long roleId);

    /**
     * 根据用户id查询角色集合
     *
     * @param userId 用户id
     * @return {@link List }<{@link SysRole }>
     * @author 张颖辉（zyh）
     * @date 2023/06/28
     * @version 1.0.0
     */
    List<SysRole> queryByUserId(Long userId);

    /**
     * 通过角色id查询菜单id，排除了父菜单
     *
     * @param roleId 角色id
     * @return {@link List }<{@link Long }>
     * @author 张颖辉（zyh）
     * @date 2023/07/12
     * @version 1.0.0
     */
    List<Long> queryMenuIdByRoleId(Long roleId);

    /**
     * 插入角色菜单关联表
     *
     * @param roleId 角色id
     * @param menuId 菜单id
     * @author 张颖辉（zyh）
     * @date 2023/07/12
     * @version 1.0.0
     */
    void insertRoleMenu(@Param("roleId") Long roleId, @Param("menuId") Long menuId);

    /**
     * 根据角色id删除角色菜单关联数据
     *
     * @param roleId 角色id
     * @author 张颖辉（zyh）
     * @date 2023/07/12
     * @version 1.0.0
     */
    void deleteRoleMenuByRoleId(Long roleId);
}
